package com.intelligent.system.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.intelligent.system.common.dto.TagCreateAndAssociateDTO;
import com.intelligent.system.common.dto.TagDTO;
import com.intelligent.system.common.dto.TagPageDTO;
import com.intelligent.system.common.dto.TagQueryDTO;
import com.intelligent.system.common.entity.Tag;
import com.intelligent.system.common.response.ResultDO;

import java.util.List;

/**
 * 标签服务接口
 */
public interface TagService extends IService<Tag> {

    /**
     * 根据标签名称搜索标签列表
     *
     * @param queryDTO 查询参数（包含标签名称）
     * @return 标签列表
     */
    ResultDO<List<TagDTO>> searchTags(TagQueryDTO queryDTO);

    /**
     * 根据ID查询标签
     *
     * @param id 标签ID
     * @return 标签信息
     */
    ResultDO<TagDTO> getById(Long id);


    /**
     * 新增标签
     *
     * @param tagDTO 标签信息
     * @return 操作结果
     */
    ResultDO<Void> saveTag(TagDTO tagDTO);

    /**
     * 更新标签
     *
     * @param tagDTO 标签信息
     * @return 操作结果
     */
    ResultDO<Void> updateTag(TagDTO tagDTO);

    /**
     * 删除标签
     *
     * @param id 标签ID
     * @return 操作结果
     */
    ResultDO<Void> removeById(Long id);

    /**
     * 分页查询标签列表
     *
     * @param pageDTO 分页查询参数
     * @return 分页结果
     */
    ResultDO<IPage<TagDTO>> page(TagPageDTO pageDTO);

    /**
     * 创建标签并关联对象
     * 如果标签不存在则创建，然后与对象关联
     *
     * @param dto 创建并关联参数
     * @return 标签信息
     */
    ResultDO<?> createAndAssociate(TagCreateAndAssociateDTO dto);

    /**
     * 根据对象ID和对象类型查询关联的标签列表
     *
     * @param objectId 对象ID
     * @param objectType 对象类型
     * @return 标签列表
     */
    ResultDO<List<TagDTO>> listByObjectId(Long objectId, Integer objectType);
} 